package com.guodi.model.utils;


import com.guodi.model.entity.ApiIdtIndicatorsDir;

import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;

/**
 * 排序工具类
 * @作者: 陈宏成
 * @日期: 2021/9/29 12:33
 */
public class SortUtil {

    /**
     * 给指标体系排序，按照层级和各层级中的sort进行排序
     * @入参： list 原列表，不要求有序
     * @入参： parentId 父节点id
     * @入参： initLevel 初始层级
     * @出参： List<ApiIdtIndicatorsDir> 排好序的结果集
     * @作者： 陈宏成
     * @日期： 2021/9/29
     */
    public static List<ApiIdtIndicatorsDir> sortList(List<ApiIdtIndicatorsDir> list, String parentId, int initLevel) {
        if (list == null || list.isEmpty()){
            return new LinkedList<>();
        }
        // 结果集
        List<ApiIdtIndicatorsDir> resultList = new LinkedList<>();
        // 按照sort进行全局排序
        list.sort(new Comparator<ApiIdtIndicatorsDir>() {
            @Override
            public int compare(ApiIdtIndicatorsDir o1, ApiIdtIndicatorsDir o2) {
                if(o1.getSort() == null && o2.getSort() == null ){
                    return 0;
                }else if(o1.getSort() == null  ){
                    return -1;
                }else if(o2.getSort() == null  ){
                    return 1;
                }else{
                    return Integer.compare(o1.getSort(), o2.getSort());
                }
            }
        });
        // 为每层进行排序
        sortListWithLevel(list,parentId,resultList,initLevel);
        // 返回结果
        return resultList;
    }

    /**
     * 给指标体系排序，按照层级进行排序
     * @入参： list 原列表，已经按照sort排好序的
     * @入参： parentId 父节点id
     * @入参： initLevel 初始层级
     * @出参： List<ApiIdtIndicatorsDir> 排好序的结果集
     * @作者： 陈宏成
     * @日期： 2021/9/29
     */
    public static List<ApiIdtIndicatorsDir> sortListWithLevel(List<ApiIdtIndicatorsDir> list, String parentId, int initLevel){
        if (list == null || list.isEmpty()){
            return new LinkedList<>();
        }
        // 结果集
        List<ApiIdtIndicatorsDir> resultList = new LinkedList<>();
        // 为每层进行排序
        sortListWithLevel(list,parentId,resultList,initLevel);
        // 返回结果
        return resultList;
    }

    /**
     * 给指标体系排序，按照层级进行排序
     * @入参： list 原列表，已经按照sort排好序的
     * @入参： parentId 父节点id
     * @入参： resultList 结果列表
     * @入参： initLevel 初始层级
     * @出参：
     * @作者： 陈宏成
     * @日期： 2021/9/29
     */
    private static void sortListWithLevel(List<ApiIdtIndicatorsDir> list, String parentId, List<ApiIdtIndicatorsDir> resultList, int initLevel) {
        for (ApiIdtIndicatorsDir node : list) {
            if (node.getParentId().equals(parentId)) {
                node.setTreeLevel(initLevel);
                resultList.add(node);
                sortListWithLevel(list, node.getId(), resultList, initLevel + 1);
            }
        }
    }

}
